#include <exti.h>

/* 函数作用：初始化外部中断0
 * 参数说明：void
 * 返回值：void
 */
void exti0_init(void)
{
    EXTI_InitTypeDef EXTI_InitSture;
    NVIC_InitTypeDef NVIC_InitSture;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); // 中断线配置

    EXTI_InitSture.EXTI_Line    = EXTI_Line0;          // 中断线
    EXTI_InitSture.EXTI_LineCmd = ENABLE;              // 使能
    EXTI_InitSture.EXTI_Mode    = EXTI_Mode_Interrupt; // 模式（中断）
    EXTI_InitSture.EXTI_Trigger = EXTI_Trigger_Rising; // 触发方式（上升沿）

    EXTI_Init(&EXTI_InitSture); // 外部中断初始化

    NVIC_InitSture.NVIC_IRQChannel                   = EXTI0_IRQn; // 中断类型，定义在文件stm32f10x.h中170行处
    NVIC_InitSture.NVIC_IRQChannelCmd                = ENABLE;     // 使能
    NVIC_InitSture.NVIC_IRQChannelPreemptionPriority = 0;          // 抢占优先级
    NVIC_InitSture.NVIC_IRQChannelSubPriority        = 0;          // 响应优先级

    NVIC_Init(&NVIC_InitSture); // 设置中断抢占优先级与响应优先级
}

/* 函数作用：EXTI0中断服务程序
 * 参数说明：void
 * 返回值：void
 */
void EXTI0_IRQHandler(void)
{
    /* 中断处理代码 */

    EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断标志位（必要步骤，只能手动清除）
}
